home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 2
/
Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso
/
Aminet
/
dev
/
e
/
amigae21b.lha
/
Amiga_E_v2.1b
/
Sources
/
Utilities
/
Nkript.e
< prev
next >
Wrap
Text File
|
1992-09-02
|
2KB
|
77 lines
/* Nkript.e, very simple file (de)coder
USAGE: nkript <file> */
ENUM ER_NONE,ER_FILE,ER_MEM,ER_USAGE,ER_OUT,ER_ILLEGAL,ER_NONUM
DEF flen,mem,handle=NIL,key,keyadd,file[200]:STRING,p
PROC main()
WriteF('Nkript (c) 1992 $#%!\n')
IF StrCmp(arg,'',1) OR StrCmp(arg,'?',2) THEN error(ER_USAGE)
flen:=FileLength(arg)
handle:=Open(arg,OLDFILE)
IF (flen<1) OR (handle=NIL) THEN error(ER_FILE)
mem:=New(flen+4)
IF mem=NIL THEN error(ER_MEM)
IF Read(handle,mem,flen)<>flen THEN error(ER_FILE)
Close(handle); handle:=NIL
key:=readpass('key',4,FALSE)
keyadd:=readpass('pin',3,TRUE) OR 3
WriteF('Now (de)coding "\s".\n',arg)
nkript()
p:=InStr(arg,'.',0)
StrCopy(file,arg,p)
IF StrCmp(arg+p,'.nkr',ALL)=FALSE THEN StrAdd(file,'.nkr',ALL)
handle:=Open(file,NEWFILE)
IF handle=NIL THEN error(ER_OUT)
WriteF('Writing "\s".\n',file)
IF Write(handle,mem,flen)<>flen THEN error(ER_OUT)
error(ER_NONE)
ENDPROC
PROC nkript()
MOVE.L flen,D7
LSR.L #2,D7 /* D7 = #of LONGs */
MOVE.L key,D6
MOVE.L keyadd,D4
MOVE.L mem,A0
l: MOVE.L D4,D5
SUB.L D6,D5
LSL.L #3,D6 /* random alg. D6*7+keyadd (11) */
ADD.L D5,D6
EOR.L D6,(A0)+
DBRA D7,l
SUB.L #$10000,D7
BCC.S l /* DBRA.L emulation */
ENDPROC
PROC readpass(messy,numchars,decflag)
DEF s[25]:STRING,a,t,n=0,f=1
WriteF('\s[\d]: ',messy,numchars)
ReadStr(stdout,s)
IF EstrLen(s)<>numchars THEN error(ER_ILLEGAL)
IF decflag
t:=s
FOR a:=1 TO numchars
n:=n+(t[]-"0"*f)
IF (t[]<"0") OR (t[]++>"9") THEN error(ER_NONUM)
f:=f*10
ENDFOR
^s:=n
ENDIF
ENDPROC ^s
PROC error(nr)
IF handle THEN Close(handle)
SELECT nr
CASE ER_NONE; WriteF('Done.\n')
CASE ER_FILE; WriteF('Could not read file "\s" !\n',arg)
CASE ER_MEM; WriteF('No memory for loading file!\n')
CASE ER_USAGE; WriteF('USAGE: Nkript <file>\n')
CASE ER_OUT; WriteF('Could not write file "\s" !\n',file)
CASE ER_ILLEGAL; WriteF('Wrong #of chars\n')
CASE ER_NONUM; WriteF('not a decimal number\n')
ENDSELECT
CleanUp(0)
ENDPROC